Hola, estaba usando la función Match Case recién agregada, pero me encontré con este problema.
Aquí está mi código:
from typing import List class Wee(): def __init__(self) -> None: self.lololol: List[str] = ["car", "goes", "brrrr"] def func1(self): self.weee = input() try: match self.weee: case self.lololol[0]: print(self.lololol[0]) case self.lololol[1]: print(self.lololol[1]) case _: print(self.lololol[2]) except SyntaxError as e: print(e) waa = Wee() waa.func1() En las líneas 11 y 13, aparecen errores que dicen SyntaxError: expected ':' . Sin embargo, cuando cambio case self.lololol[0]: a case "car": , los errores desaparecen. ¿Qué está pasando?
No puede usar expresiones arbitrarias como patrones (ya que a veces sería ambiguo), solo un cierto subconjunto .
Si desea hacer coincidir los elementos de una lista, probablemente debería, dependiendo de la situación, convertirlos en variables separadas o usar list.index .
Esto se debe a que la declaración de case de match está destinada a la coincidencia estructural . Específicamente PEP 635 dice:
Aunque los patrones pueden parecer superficialmente expresiones, es importante tener en cuenta que existe una distinción clara. De hecho, ningún patrón es o contiene una expresión. Es más productivo pensar en patrones como elementos declarativos similares a los parámetros formales en una definición de función.
Específicamente, las variables simples se usan como patrones de captura y no como patrones de coincidencia (definitivamente no es lo que un programador de C/C++ podría esperar...) y funciones o subíndices o simplemente no están permitidos.
Desde un punto de vista práctico, solo las expresiones literales o punteadas se pueden usar como patrones coincidentes.